package com.atguigu.java;

import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/**
 * 涉及到String类与其他结构之间的转换
 */
public class StringTest1 {

    /*
    编码：String与byte[]之间转换
    解码：String -->byte[]:调用String的getBytes（）

    编码：字符串 -->字节 （看得懂 --->看不懂的二进制数据）
    解码：编码的逆过程，字节 --> 字符串（看不懂的二进制数据 ---> 看得懂）

    说明：解码时，要求解码使用的字符集必须与编码时使用的字符集一致，否则会出现乱码
     */
    @Test
    public void test4() throws UnsupportedEncodingException {
        String str1 = "abc123中国";
        byte[] bytes = str1.getBytes();//使用默认的字符集，进行转换
        System.out.println(Arrays.toString(bytes));

        byte[] gbks = str1.getBytes("gbk");//使用jbk字符集进行编码。
        System.out.println(Arrays.toString(gbks));

        System.out.println("*****************");

        String str2 = new String(bytes);
        System.out.println(str2);

        String str3 = new String(gbks);
        System.out.println(str3);//出现乱码，原因：编码集与解码集不一样

        String str4 = new String(gbks,"gbk");
        System.out.println(str4);
    }


    /*
    将abc123反转为a21cb3
     */
    @Test
    public void test3(){
        String s1 = "abc123";

        char[] chars = s1.toCharArray();
        for (int i = 1,j = s1.length() - 2;i < j;i++,j--){
            char c1 = chars[i];
            chars[i] = chars[j];
            chars[j] = c1;
        }
        String s = new String(chars);
        System.out.println(s);
    }

    /*
    String与char[]之间的转换

    String ---> char[]:调用String的toCharArray()
    char[] --->String:调用String构造器
     */
    @Test
    public void test2() {
        String str1 = "abc123";

        char[] charArray = str1.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            System.out.println(charArray[i]);
        }
        char[] arr = new char[]{'a', 'b', 'c', 'd', 'e'};
        String s = new String(arr);
        System.out.println(s);

    }

    /*
    复习：
    String 与基本类型、包装类之间的转换
    String ---> 基本数据类型、包装类:调用parseXxx(str)
    基本数据类型、包装类 ---> String:调用String重载的valueOf(xxx)
    */

    @Test
    public void test1() {
        String str1 = "123";
//      int num = (int) str1;错误的
        int num = Integer.parseInt(str1);
        System.out.println(num);
        int num2 = 456;
        String str2 = String.valueOf(num2);
        String str3 = num2 + "";
        System.out.println(str2);
        System.out.println(str3);
        System.out.println(str2 == str3);


    }


}
